package repository

import (
	"GIN-API/internal/models"
	"errors"
	"gorm.io/gorm"
)

type UserRepository struct {
	db *gorm.DB
}

func NewUserRepo(db *gorm.DB) *UserRepository {
	return &UserRepository{db: db}
}

// CreateUser 创建用户
func (ur *UserRepository) CreateUser(user *models.User) error {
	return ur.db.Create(user).Error
}

// GetUserByID 根据用户 ID 获取用户信息
func (ur *UserRepository) GetUserByID(id uint) (*models.User, error) {
	var user models.User
	err := ur.db.First(&user, id).Error
	if err != nil {
		if errors.Is(err, gorm.ErrRecordNotFound) {
			return nil, nil
		}
		return nil, err
	}
	return &user, nil
}

// GetUserByUsername 根据用户名获取用户信息
func (ur *UserRepository) GetUserByUsername(username string) (*models.User, error) {
	var user models.User
	err := ur.db.Where("username =?", username).First(&user).Error
	if err != nil {
		if errors.Is(err, gorm.ErrRecordNotFound) {
			return nil, nil
		}
		return nil, err
	}
	return &user, nil
}

// UpdateUser 更新用户信息
func (ur *UserRepository) UpdateUser(user *models.User) error {
	return ur.db.Model(user).Updates(user).Error
}

// DeleteUser 根据用户 ID 删除用户
func (ur *UserRepository) DeleteUser(id uint) error {
	return ur.db.Delete(&models.User{}, id).Error
}
